function FadeUtils(params) {

  var oThis = this;
  
  var loAttributes = params.loAttr;
  
  var hiAttributes = params.hiAttr;
  
  this.loLabelAnim = new YAHOO.util.Anim(params.obj_1_parent, loAttributes, 0.3);
  this.hiLabelAnim = new YAHOO.util.Anim(params.obj_1_parent, hiAttributes, 0.3);

  this.hiTargetAnim = new YAHOO.util.Anim(params.obj_2, hiAttributes, 0.3);
  this.loTargetAnim = new YAHOO.util.Anim(params.obj_2, loAttributes, 0.3);

  this.showLabel = function() {
      
      clearTimeout(oThis.mouseOutTimeout);
      oThis.mouseOutTimeout = null;
      
      oThis.loTargetAnim.animate();
      setTimeout(oThis._startHiLabelAnimation, 500);
  }
  
  this.showTarget = function() {
      clearTimeout(oThis.mouseOutTimeout);
      oThis.mouseOutTimeout = null;
      
      oThis.loLabelAnim.animate();
      setTimeout(oThis._startHiTagretAnimation, 500);
      
      oThis.restartHide();
  }
  
  this._startHiTagretAnimation = function () {
      document.getElementById(params.obj_2).style.opacity = "0";
      document.getElementById(params.obj_2).style.display = "";
      oThis.hiTargetAnim.animate();
  }
  
  this._startHiLabelAnimation = function () {
      document.getElementById(params.obj_2).style.display = "none";

      document.getElementById(params.obj_1_parent).style.opacity = "0";
      document.getElementById(params.obj_1_parent).style.display = "";
      oThis.hiLabelAnim.animate();
  }
  
  this.mouseOutTimeout = null;
  
  this.restartHide = function() {
      clearTimeout(oThis.mouseOutTimeout);
      oThis.mouseOutTimeout = null;
      oThis.mouseOutTimeout = setTimeout(oThis.showLabel, 5000);
  }
  
  YAHOO.util.Event.on(document.getElementById(params.obj_1), params.obj_1_event, oThis.showTarget);

  var length = params.obj_2_saved_elements.length;
  for (var i = 0; i < length; i++) {
  	  YAHOO.util.Event.on(document.getElementById(params.obj_2_saved_elements[i].id), 
  	  				params.obj_2_saved_elements[i].event, oThis.restartHide);
  }

  this.showLabel();
}
